home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_200
/
213_01
/
unvanr.c
< prev
next >
Wrap
Text File
|
1980-01-01
|
5KB
|
289 lines
/* UNVANR.C VERS:- 01.00 DATE:- 09/26/86 TIME:- 09:37:29 PM */
/*
%CC1 $1.C -X -E6000
%CLINK $1 DIO -S -E6000
%DELETE $1.CRL
*/
/*
Description:
Filter to convert Van Nuys Toolkit format back to standard C tokens.
DIO redirection.
Adapted from Van Nuys Toolkit program CASE, by Eugene H. Mallory.
By J.A. Rupley, Tucson, Arizona
Coded for BDS C compiler, version 1.50a
*/
#include "bdscio.h"
#include "dio.h"
#define MAXNAMES 40
int lastchar;
int preprocessor;
main(argc, argv)
char **argv;
int argc;
{
char word[10000];
char delimiter[1];
int c;
int flag;
int i;
char *keyword[MAXNAMES];
int keycount[MAXNAMES];
i = 0;
/*
keyword[i++] = "flush";
keyword[i++] = "NOT";
*/
keyword[i++] = "AND"; /*0*/
keyword[i++] = "OR";
keyword[i++] = "EQUAL";
keyword[i++] = "NOTEQUAL";
keyword[i++] = "BEGIN";
keyword[i++] = "THEN"; /*5*/
keyword[i++] = "LOOP";
keyword[i++] = "END";
keyword[i++] = "ENDIF";
keyword[i++] = "ENDLOOP";
keyword[i++] = "FUNCTION"; /*10*/
keyword[i++] = "MAIN";
keyword[i++] = "CHAR";
keyword[i++] = "INT";
keyword[i++] = "REGISTER";
keyword[i++] = "STRUCT";
keyword[i++] = "UNION";
keyword[i++] = "UNSIGNED";
keyword[i++] = "BREAK";
keyword[i++] = "CONTINUE";
keyword[i++] = "DEFAULT";
keyword[i++] = "IF";
keyword[i++] = "ELSE";
keyword[i++] = "GOTO";
keyword[i++] = "DO";
keyword[i++] = "FOR";
keyword[i++] = "WHILE";
keyword[i++] = "RETURN";
keyword[i++] = "SIZEOF";
keyword[i++] = "SWITCH";
keyword[i++] = "CASE";
keyword[i++] = "DEFINE";
keyword[i++] = "IFDEF";
keyword[i++] = "IFNDEF";
keyword[i++] = "UNDEF";
keyword[i++] = "INCLUDE";
keyword[i++] = "$$$";
lastchar = 0;
for (i = 0; i < MAXNAMES; i++)
keycount[i] = 0;
dioinit(&argc, argv);
if (!_dioinflg)
{
printf(
"\nUSAGE:\n");
printf(
" unvanuys <vanuys_fid [>out_fid or |DIO_pipe or default = crt]\n\n");
printf(
"one of three formatting filters:\n\n");
printf(
"unvanuys - converts keywords of Van Nuys Toolkit to standard K & R 'c'\n");
printf(
"cbprep - produces consistent spacing of 'c' text and one statement per line\n");
printf(
" output must be filtered by cb\n");
printf(
"cb - indents according to control level\n\n");
dioexit();
}
do
{
flag = get_word(word, delimiter);
if (preprocessor)
{
lower_case(word);
puts(word);
if (flag)
putchar(delimiter[0]);
continue;
}
for (i = 0; i < MAXNAMES; i++)
{
if (strequ(keyword[i], "$$$"))
break;
if (strequ(keyword[i], word))
{
keycount[i]++;
switch (i)
{
case 0 :
strcpy(word, "&&");
break;
case 1 :
strcpy(word, "||");
break;
case 2 :
strcpy(word, "==");
break;
case 3 :
strcpy(word, "!=");
break;
case 4 :
case 5 :
case 6 :
strcpy(word, "{");
break;
case 7 :
case 8 :
case 9 :
strcpy(word, "}");
break;
case 10 :
strcpy(word, "");
break;
default :
lower_case(word);
}
break;
}
}
puts(word);
if (flag)
putchar(delimiter[0]);
}
while (flag)
;
for (i = 0; i < MAXNAMES; i++)
{
if (strequ(keyword[i], "$$$"))
break;
if (keycount[i])
{
typef("%7d %ss\n", keycount[i], keyword[i]);
}
}
dioflush();
}
int get_word(cptr, dptr)
char *cptr, *dptr;
{
int c;
int nest;
int cptr_start;
cptr_start = cptr;
nest = 0;
if (lastchar == '#')
preprocessor = 1;
else
preprocessor = 0;
lup :
c = getchar();
if (c == EOF)
{
*cptr++ = 0;
*dptr = CPMEOF;
return 0;
}
if (lastchar == '/' && c == '*')
{
lastchar = 0;
while ((c != '/') || (lastchar != '*') || (nest > 0))
{
if ((lastchar == '/') && (c == '*'))
nest++;
if ((lastchar == '*') && (c == '/'))
nest--;
*cptr++ = c;
lastchar = c;
c = getchar();
}
*cptr++ = c;
goto lup;
}
if (c == '"')
{
lastchar = '\\';
while (c != '"' || lastchar == '\\')
{
*cptr++ = c;
lastchar = c;
c = getchar();
}
*cptr++ = c;
if (c == '\\' && lastchar == '\\')
{
*cptr++ = c;
lastchar = 0;
c = getchar();
}
goto lup;
}
if (c == '\'')
{
lastchar = '\\';
while (c != '\'' || lastchar == '\\')
{
*cptr++ = c;
lastchar = c;
c = getchar();
if (c == '\\' && lastchar == '\\')
{
*cptr++ = c;
lastchar = 0;
c = getchar();
}
}
*cptr++ = c;
goto lup;
}
if (isalpha(c) || c == '_' || isdigit(c))
{
*cptr++ = c;
goto lup;
}
*cptr++ = 0;
*dptr = c;
lastchar = c;
return 1;
}
void lower_case(cptr)
char *cptr;
{
while (*cptr != 0)
{
*cptr = tolower(*cptr);
cptr++;
}
}
strequ(s1, s2)
char *s1, *s2;
{
while (toupper(*s1++) == toupper(*s2++))
if (!*s1 && !*s2)
return (1);
return (0);
}